<ResourceDictionary 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >

  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="Shared.xaml" />
  </ResourceDictionary.MergedDictionaries>

  <Style x:Key="{x:Type TreeView}" TargetType="TreeView">
    <Setter Property="OverridesDefaultStyle" Value="True" />
    <Setter Property="SnapsToDevicePixels" Value="True" />
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="TreeView">
          <Border 
            Name="Border" 
            CornerRadius="2" 
            Background="{StaticResource ItemsBackgroundBrush}"
            BorderBrush="{StaticResource SolidBorderBrush}"
            BorderThickness="1" >
            <ScrollViewer 
              Focusable="False"
              CanContentScroll="False"
              Padding="4">
              <ItemsPresenter/>
            </ScrollViewer>
          </Border>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>

  <!--=================================================================
        TreeViewItem
    ==================================================================-->
  <Style x:Key="ExpandCollapseToggleStyle" TargetType="{x:Type ToggleButton}">
    <Setter Property="Focusable" Value="False"/>
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type ToggleButton}">
          <!--
          <Grid x:Name="Container" Width="16" Height="16" Background="Transparent">
            <Path x:Name="ExpandPath"
              HorizontalAlignment="Left"
              VerticalAlignment="Center"
              Margin="1"
              Stroke="{StaticResource GlyphBrush}"
              Data="M 4,0 L 8,4 L 4,8 Z"/>
          </Grid>
          -->
          <Border x:Name="Border"
                  CornerRadius="2"
                  Background="Transparent"
                  BorderThickness="1"
                  BorderBrush="Transparent" 
                  Margin="0,0,2,0">
            <Path x:Name="ExpandPath"
              HorizontalAlignment="Left"
              VerticalAlignment="Center"
              Margin="1"
              Stroke="{StaticResource GlyphBrush}"
              Data="M 4,0 L 8,4 L 4,8 Z"/>
          </Border>
          <ControlTemplate.Triggers>
            <Trigger Property="IsChecked" Value="True">
              <Setter Property="Data"
                  TargetName="ExpandPath"
                  Value="M 2,4 L 10,4 L 6,8 Z"/>
              <Setter Property="Fill"
                  TargetName="ExpandPath"
                  Value="{StaticResource GlyphBrush}"/>
            </Trigger>
            <Trigger Property="IsMouseOver" Value="true">
              <Setter TargetName="Border" Property="Background" Value="{StaticResource HoverBrush}"/>
              <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource NormalBorderBrush}"/>
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>

  <Style x:Key="TreeViewItemFocusVisual">
    <Setter Property="Control.Template">
      <Setter.Value>
        <ControlTemplate>
          <Border>
            <Rectangle Margin="0,0,0,0"
                   StrokeThickness="5"
                   Stroke="Black"
                   StrokeDashArray="1 2"
                   Opacity="0"/>
          </Border>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
  
  <Style TargetType="{x:Type TreeViewItem}">
    <Setter Property="Background"
        Value="Transparent"/>
    <Setter Property="HorizontalContentAlignment"
        Value="{Binding Path=HorizontalContentAlignment,
                RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
    <Setter Property="VerticalContentAlignment"
        Value="{Binding Path=VerticalContentAlignment,
                RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
    <Setter Property="Foreground"
        Value="{StaticResource ForegroundBrush}"/>
    <Setter Property="FocusVisualStyle"
        Value="{StaticResource TreeViewItemFocusVisual}"/>
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type TreeViewItem}">
          <Grid>
            <Grid.ColumnDefinitions>
              <ColumnDefinition MinWidth="19" Width="Auto"/>
              <ColumnDefinition Width="Auto"/>
              <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
              <RowDefinition Height="Auto"/>
              <RowDefinition/>
            </Grid.RowDefinitions>
            <ToggleButton
              x:Name="Expander"
              Style="{StaticResource ExpandCollapseToggleStyle}"
              IsChecked="{Binding Path=IsExpanded,RelativeSource={RelativeSource TemplatedParent}}"
              ClickMode="Press"/>
            <Border Name="Border"
                    Grid.Column="1"
                    Padding="2,1"
                    CornerRadius="2">
              <ContentPresenter
                x:Name="PART_Header"
                ContentSource="Header"
                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
            </Border>
            <ItemsPresenter
              x:Name="ItemsHost"
              Grid.Row="1"
              Grid.Column="1"
              Grid.ColumnSpan="2"/>
          </Grid>
          <ControlTemplate.Triggers>
            <Trigger Property="IsExpanded" Value="false">
              <Setter TargetName="ItemsHost" Property="Visibility" Value="Collapsed"/>
            </Trigger>
            <Trigger Property="HasItems" Value="false">
              <Setter TargetName="Expander" Property="Visibility" Value="Hidden"/>
            </Trigger>
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="IsSelected" Value="true"/>
                <Condition Property="IsSelectionActive" Value="true"/>
              </MultiTrigger.Conditions>
              <Setter TargetName="Border"
                  Property="Background"
                  Value="{StaticResource SelectedFocusBackgroundBrush}"/>
              <Setter Property="Foreground" Value="{StaticResource SelectedForegroundBrush}"/>
            </MultiTrigger>
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="IsSelected" Value="true"/>
                <Condition Property="IsSelectionActive" Value="false"/>
              </MultiTrigger.Conditions>
              <Setter TargetName="Border"
                  Property="Background"
                  Value="{StaticResource SelectedNoFocusBackgroundBrush}"/>
              <Setter Property="Foreground" Value="{StaticResource SelectedForegroundBrush}"/>
            </MultiTrigger>
            <Trigger Property="IsEnabled" Value="false">
              <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/>
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
</ResourceDictionary>